package com.study.zzedu.ui;

import android.annotation.SuppressLint;
import android.content.Intent;
import android.graphics.Bitmap;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import android.support.v7.app.ActionBar;
import android.support.v7.app.AppCompatActivity;
import android.view.KeyEvent;
import android.view.View;
import android.webkit.WebChromeClient;
import android.webkit.WebResourceRequest;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.TextView;

import com.study.zzedu.R;

import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;

public class Webview_try extends AppCompatActivity {
    private WebView mWebView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_webview_try);
        ActionBar actionBar = getSupportActionBar();
        if(actionBar != null) {
            actionBar.hide();
        }
        Intent in = getIntent();
        String url = in.getStringExtra("url");
        String title = in.getStringExtra("title");
        mWebView = (WebView) findViewById(R.id.webView1);

        findViewById(R.id.rl_back).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                finish();
            }
        });
        TextView tv = (TextView)findViewById(R.id.tv_title);
        tv.setText(title);
        // 设置WebView的客户端
//        mWebView.setWebViewClient(new WebViewClient(){
//            @Override
//            public boolean shouldOverrideUrlLoading(WebView view, String url) {
//                return false;// 返回false
//            }
//        });
        //baiduboxapp:
        //webView加载网页后出现ERR_UNKNOWN_URL_SCHEME
        /*mWebView.setWebViewClient(new WebViewClient(){
            @Override
            public boolean shouldOverrideUrlLoading(WebView view, String url) {
                try{
                    if(url.startsWith("baiduboxapp://")){
                        Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
                        startActivity(intent);
                        return true;
                    }
                }catch (Exception e){
                    return false;
                }
                mWebView.loadUrl(url);
                return true;
            }
        });*/
        WebSettings webSettings = mWebView.getSettings();
        webSettings.setBuiltInZoomControls(true);// 隐藏缩放按钮
        webSettings.setJavaScriptEnabled(true);
        webSettings.setPluginState(WebSettings.PluginState.ON);
        webSettings.setUseWideViewPort(true);// 可任意比例缩放
        webSettings.setLoadWithOverviewMode(true);// setUseWideViewPort方法设置webview推荐使用的窗口。setLoadWithOverviewMode方法是设置webview加载的页面的模式。

        webSettings.setSavePassword(true);
        webSettings.setSaveFormData(true);// 保存表单数据
        webSettings.setJavaScriptEnabled(true);

        webSettings.setDomStorageEnabled(true);
        webSettings.setSupportMultipleWindows(true);// 新加

        //我就是没有这一行，死活不出来。MD，硬是没有人写这一句的
        //mWebView.setWebChromeClient(new WebChromeClient());
        mWebView.setWebViewClient(new MkWebViewClient());
        mWebView.loadUrl(url);
    }
    // 设置回退监听
    // 5、覆盖Activity类的onKeyDown(int keyCoder,KeyEvent event)方法
    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        if ((keyCode == KeyEvent.KEYCODE_BACK) ) {
            if (mWebView.canGoBack())
            {
                mWebView.goBack(); //goBack()表示返回WebView的上一页面
                return true;
            }else
            {
                finish();
                return true;
            }

        }
        return false;
    }

    /**
     * 初始化 web
     */
    @SuppressLint("SetJavaScriptEnabled")
//    private void initWeb() {
//        // 重写 WebViewClient
//        webView.setWebViewClient(new MkWebViewClient());
//        // 重写 WebChromeClient
//        webView.setWebChromeClient(new MkWebChromeClient());
//
//        WebSettings settings = webView.getSettings();
//        // 启用 js 功能
//        settings.setJavaScriptEnabled(true);
//        // 设置浏览器 UserAgent
//        settings.setUserAgentString(settings.getUserAgentString() + " mkBrowser/" + getVerName(mContext));
//
//        // 将图片调整到适合 WebView 的大小
//        settings.setUseWideViewPort(true);
//        // 缩放至屏幕的大小
//        settings.setLoadWithOverviewMode(true);
//
//        // 支持缩放，默认为true。是下面那个的前提。
//        settings.setSupportZoom(true);
//        // 设置内置的缩放控件。若为false，则该 WebView 不可缩放
//        settings.setBuiltInZoomControls(true);
//        // 隐藏原生的缩放控件
//        settings.setDisplayZoomControls(false);
//
//        // 缓存
//        settings.setCacheMode(WebSettings.LOAD_DEFAULT);
//        // 设置可以访问文件
//        settings.setAllowFileAccess(true);
//        // 支持通过JS打开新窗口
//        settings.setJavaScriptCanOpenWindowsAutomatically(true);
//        // 支持自动加载图片
//        settings.setLoadsImagesAutomatically(true);
//        // 设置默认编码格式
//        settings.setDefaultTextEncodingName("utf-8");
//        // 本地存储
//        settings.setDomStorageEnabled(true);
//        settings.setPluginState(WebSettings.PluginState.ON);
//
//        // 资源混合模式
//        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
//            settings.setMixedContentMode(WebSettings.MIXED_CONTENT_ALWAYS_ALLOW);
//        }
//
//        try {
//            if (Build.VERSION.SDK_INT >= 16) {
//                Class<?> clazz = webView.getSettings().getClass();
//                Method method = clazz.getMethod(
//                        "setAllowUniversalAccessFromFileURLs", boolean.class);//利用反射机制去修改设置对象
//                if (method != null) {
//                    method.invoke(webView.getSettings(), true);//修改设置
//                }
//            }
//        } catch (IllegalArgumentException e) {
//            e.printStackTrace();
//        } catch (NoSuchMethodException e) {
//            e.printStackTrace();
//        } catch (IllegalAccessException e) {
//            e.printStackTrace();
//        } catch (InvocationTargetException e) {
//            e.printStackTrace();
//        }
//        // 加载首页
//        webView.loadUrl(myURL);
//    }

    private static final String HTTP = "http://";
    private static final String HTTPS = "https://";
    /**
     * 重写 WebViewClient
     */
    private class MkWebViewClient extends WebViewClient {

        @Override
        public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
            {
                String jsFunction="javascript:function startHide() {"+
                        "var meta = document.createElement('meta');"+
                        "meta.setAttribute('name', 'viewport');"+
                        "meta.setAttribute('content', 'width=device-width'); " +
                        "document.getElementsByTagName('head')[0].appendChild(meta);" +
                        " var imgs = document.getElementsByTagName('img');" +
                        "for (var i in imgs){imgs[i].style.maxWidth='100%';imgs[i].style.height='auto';}";
                view.loadUrl(jsFunction);
                view.loadUrl("javascript:startHide();");
            }
            return super.shouldOverrideUrlLoading(view, request);

        }

        @Override
        public void onPageStarted(WebView view, String url, Bitmap favicon) {
            {
                String jsFunction="javascript:function startHide() {"+
                        "var meta = document.createElement('meta');"+
                        "meta.setAttribute('name', 'viewport');"+
                        "meta.setAttribute('content', 'width=device-width'); " +
                        "document.getElementsByTagName('head')[0].appendChild(meta);" +
                        " var imgs = document.getElementsByTagName('img');" +
                        "for (var i in imgs){imgs[i].style.maxWidth='100%';imgs[i].style.height='auto';}";
                view.loadUrl(jsFunction);
                view.loadUrl("javascript:startHide();");
            }
            super.onPageStarted(view, url, favicon);
        }

        @Override
        public void onPageFinished(WebView view, String url) {
            //判断加载完成的页面是否是需要修改的网站链接
            {
                String jsFunction="javascript:function startHide() {"+
                        "var meta = document.createElement('meta');"+
                        "meta.setAttribute('name', 'viewport');"+
                        "meta.setAttribute('content', 'width=device-width'); " +
                        "document.getElementsByTagName('head')[0].appendChild(meta);" +
                        " var imgs = document.getElementsByTagName('img');" +
                        "for (var i in imgs){imgs[i].style.maxWidth='100%';imgs[i].style.height='auto';}";
                view.loadUrl(jsFunction);
                view.loadUrl("javascript:startHide();");
            }
            super.onPageFinished(view,url);

        }
    }


    /**
     * 重写 WebChromeClient
     */
//    private class MkWebChromeClient extends WebChromeClient {
//        private final static int WEB_PROGRESS_MAX = 100;
//
//        @Override
//        public void onProgressChanged(WebView view, int newProgress) {
//            super.onProgressChanged(view, newProgress);
//
//            // 加载进度变动，刷新进度条
//            progressBar.setProgress(newProgress);
//            if (newProgress > 0) {
//                if (newProgress == WEB_PROGRESS_MAX) {
//                    progressBar.setVisibility(View.INVISIBLE);
//                } else {
//                    progressBar.setVisibility(View.VISIBLE);
//                }
//            }
//        }
//
//        @Override
//        public void onReceivedIcon(WebView view, Bitmap icon) {
//            super.onReceivedIcon(view, icon);
//
//            // 改变图标
//            webIcon.setImageBitmap(icon);
//        }
//
//        @Override
//        public void onReceivedTitle(WebView view, String title) {
//            super.onReceivedTitle(view, title);
//
//            // 改变标题
//            setTitle(title);
//            // 显示页面标题
//            textUrl.setText(title);
//        }
//    }
}